40 POKE 53280,1:POKE53281,3 50 POKE 650,255 100 GOSUB 2000 200 PRINT"[147]" 210 PRINT" RHYTHMIC BITS" 220 PRINT" BY DAVID BARRON" 230 PRINT"(F1) - DEFINE SOUNDS" 240 PRINT"(F3) - ENTER RHYTHMIC PATTERN" 250 PRINT"(F5) - CHANGE FILTER" 255 PRINT"(F6) - SET SPEED" 260 PRINT"(F7) - PLAY PATTERN" 270 PRINT" - ENTER YOUR SELECTION -" 280 GET T$:IF T$="" THEN 280 290 IF T$="[133]" THEN 1000 295 IF T$="[134]" THEN 5500 300 IF T$="[135]" THEN 350 305 IF T$="[139]" THEN 500 310 IF T$="[136]" THEN 6000 320 GOTO 280 350 PRINT "[147] FILTER CHANGE" 352 PRINT"(F1) - INCREASE" 353 PRINT"(F3) - DECREASE" 354 PRINT"(F7) - QUIT" 360 PRINT"LOW: :HIGH" 380 PRINT"" 385 REM 390 PRINT TAB(5+FI/10);"  [146] [145]" 400 GET T$:IF T$="" THEN 400 410 IF T$="[133]" THEN FI=FI+1:IF FI>255 THEN FI=255 420 IF T$="[134]" THEN FI=FI-1:IF FI<0 THEN FI=0 425 IF T$="[136]" THEN 440 430 GOTO 385 440 POKE SID+22,FI 450 GOTO 200 500 PRINT "[147] SPEED CHANGE" 552 PRINT"(F1) - DECREASE" 553 PRINT"(F3) - INCREASE" 554 PRINT"(F7) - QUIT" 560 PRINT"FAST: :SLOW" 580 PRINT"" 585 REM 590 PRINT TAB(5+SP/10);"  [146] [145]" 600 GET T$:IF T$="" THEN 600 610 IF T$="[133]" THEN SP=SP+1:IF SP>254 THEN SP=254 620 IF T$="[134]" THEN SP=SP-1:IF SP<0 THEN SP=0 625 IF T$="[136]" THEN 640 630 GOTO 585 640 POKE 49164,SP+1 650 GOTO 200 1000 PRINT"[147]":POKE 650,255:IF V>7 THEN V=0 1020 PRINT"" 1030 PRINT"FREQUENCY:" 1040 PRINT "DECAY :" 1050 PRINT"WAVE TYPE:" 1051 PRINT "USE (F1) FOR FREQUENCY INCREASE" 1052 PRINT "USE (F2) FOR FREQUENCY DECREASE" 1053 PRINT "USE (F3) FOR ATTACK INCREASE" 1054 PRINT "USE (F4) FOR ATTACK DECREASE" 1055 PRINT "USE (F5) TO CHANGE WAVEFORM" 1056 PRINT"USE (F7) TO CHANGE SOUND NUMBER" 1057 PRINT"USE (SPACEBAR) TO TEST SOUND" 1058 PRINT"USE (X) TO EXIT" 1059 PRINT" SOUND DEFINITION FOR VOICE #";V 1060 PRINT""; 1062 BASE=12*4096+256+V*4 1063 F=PEEK(BASE)+PEEK(BASE+1)*256 1064 D=PEEK(BASE+2):GOSUB 3000 1066 IF D>15 THEN D=15 1067 IF S>2 THEN S=2 1070 FOR X=1 TO (F/65535)*28 1080 PRINT " ";:NEXT X:PRINT"[146] "; 1090 PRINT"":PRINT""; 1100 FOR X=1 TO D*1.7 1110 PRINT " ";:NEXT X:PRINT"[146] "; 1120 PRINT"":PRINT""; 1130 IF S=0 THEN PRINT"TRIANGLE":S1=16 1140 IF S=1 THEN PRINT"SAWTOOTH":S1=32 1150 IF S=2 THEN PRINT"NOISE ":S1=128 1160 GET I$:IF I$="" THEN 1160 1170 IF I$="[133]"THEN F=F+(200^(1.25+F/650000)):IF F>65535 THEN F=65535 1180 IF I$="[137]"THEN F=F-(200^(1.25+F/650000)):IF F<0 THEN F=0 1190 IF I$="[134]"THEN D=D+1:IF D>15THEN D=D-1 1200 IF I$="[138]"THEN D=D-1:IF D<0 THEN D=D+1 1210 IF I$="[135]" THEN GOSUB 2200 1220 IF I$="[136]"THEN V=V+1:IF V>7 THEN V=0 1225 IF I$="[136]"THEN GOTO 1000 1230 IF I$=" " THEN POKE SID+4,S1:POKESID+4,S1+1 1235 IF I$="X" THEN 200 1240 POKE SID,F-INT(F/256)*256 1250 POKE SID+1,INT(F/256) 1260 POKE SID+6,D+240 1270 POKE SID+4,S1 1280 POKE BASE,F-INT(F/256)*256 1290 POKE BASE+1,INT(F/256) 1300 POKE BASE+2,D:POKE BASE+3,S1 1500 GOTO 1059 2000 REM INITIALIZE SID CHIP 2005 SID=54272:FI=128:SP=128 2010 FOR X=0 TO 28 2020 POKE SID+X,0:NEXT X 2030 POKE SID+21,7:POKE SID+23,7:POKE SID+22,FI 2040 POKE SID+24,31 2050 RETURN 2200 S=S+1:IF S>2 THEN S=0 2205 IF S=0 THEN S1=16 2210 IF S=1 THEN S1=32 2220 IF S=2 THEN S1=128 2230 RETURN 3000 S1=PEEK(BASE+3) 3010 IF S1=16 THEN S=0:RETURN 3020 IF S1=32 THEN S=1:RETURN 3030 IF S1=128 THEN S=2:RETURN 3040 S1=16:S=0 3050 RETURN 5000 DATA 1,2,1,4,1,2,1,4,1,2,1,4,1,2,1,4,1 5010 FOR X=49152+512 TO 49152+512+16 5020 READ A:POKE X,A:NEXT 5500 PRINT "[147] PATTERN ENTRY" 5510 PRINT" 11111111112222222222333" 5520 PRINT"[145] 12345678901234567890123456789012" 5525 PRINT"[145][145]" 5530 FOR X=0 TO 7 5550 PRINT "VOICE";X;"[157]:" 5560 NEXT X 5570 PRINT "[192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][145]" 5580 GOSUB 5850 5585 PRINT"CURSOR KEYS MOVE CURSOR" 5586 PRINT"USE (F7) TO EXIT" 5587 PRINT"SPACEBAR TOGGLES MARKER" 5588 PRINT"USE (F3) TO CLEAR PATTERN" 5600 V=0:X=0 5610 LOC=40*7+V*40+8+X 5620 POKE 1024+LOC,PEEK(1024+LOC)OR128:POKE55296+LOC,14 5630 GET A$:IF A$="" THEN 5630 5640 IF A$=" " THEN IF PEEK(1024+LOC)=86+128THEN POKE 1024+LOC,160:GOTO 5650 5645 IF A$=" " THEN IF PEEK(1024+LOC)=160THEN POKE 1024+LOC,86+128 5650 IF A$="" THEN X=X+1 5660 IF A$="[157]" THEN X=X-1 5670 IF A$="" THEN V=V+1 5675 IF A$="[134]" THEN FOR X=49152+512 TO 49152+512+32:POKE X,0:NEXT X:GOTO 5500 5680 IF A$="[145]" THEN V=V-1 5685 IF A$="[136]" THEN GOTO 5750 5690 POKE 1024+LOC,PEEK(1024+LOC)AND127 5700 IF X<0 THEN X=0 5710 IF X>31 THEN X=31 5720 IF V<0 THEN V=0 5730 IF V>7 THEN V=7 5740 GOTO 5610 5750 PRINT"WORKING."; 5752 FOR X=0 TO 30 5755 S=0 5757 PRINT"."; 5760 FOR V=0 TO 7 5770 LOC=40*7+V*40+8+X 5780 IF (PEEK(1024+LOC)AND127)=86 THEN S=S+2^V 5790 NEXT V 5800 POKE 49152+512+X,S 5810 NEXT X 5815 GOSUB 8000 5820 GOTO 200 5850 FOR X=0 TO 31 5860 FOR V=0 TO 7 5862 IF PEEK(49152+512+X)=0 THEN 5895 5865 IF (PEEK(49152+512+X)AND(2^V))=0 THEN 5890 5870 LOC=40*7+V*40+8+X 5880 POKE 1024+LOC,86:POKE 55296+LOC,14 5890 NEXT V 5895 NEXT X:RETURN 6000 SYS 49312:IF PEEK(197)=64 THEN 6000 6010 GOTO 200 8000 S=0:FOR V=0 TO 7 8010 IF (PEEK(40*7+V*40+39+1024)AND127)=86 THEN S=S+2^V 8020 NEXT V:POKE 49152+512+31,S:RETURN 9999 GOTO 9999